package com.yuzhi.master.sewage.rmstSz.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yuzhi.common.core.page.PageDataInfo;
import com.yuzhi.master.drainRRmst.domain.vo.DrainRRmstVo;
import com.yuzhi.master.portableDevice.domain.bo.DrainRmstSzBo;
import com.yuzhi.master.sewage.rmstSz.entity.DrainRmstSz;
import com.yuzhi.master.sewage.rmstSz.entity.request.DrainRmstSzReq;
import com.yuzhi.master.sewage.rmstSz.entity.request.DrainRmstSzStatisticsReq;
import com.yuzhi.master.sewage.rmstSz.entity.vo.*;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 站点水质因子实时数据表 服务类
 */
public interface DrainRmstSzService extends IService<DrainRmstSz> {

    /**
     * 根据站点编码查询最新一条水质记录
     *
     * @return 最新水质记录
     */
    List<DrainRmstSzWithStnmVo> getAllLatestWithStnm();

    List<MonitoringVo> getDailySewageReportDay(String factName);

    List<MonitoringVo> getDailySewageReportMonth(String factName);

    List<MonitoringVo> getDailySewageReportYear(String factName);

    List<DrainRmstSzVo> getDailyMaxValues(String factId);

    List<MonitoringVo> getAvgData(String factId, int timeType);

    List<PumpDataDTO> getLatestPumpStationData();

    List<MonitoringVo> getRealtimeData(
            String factName,
            LocalDateTime startTime,
            LocalDateTime endTime
    );

    /**
     * 查询首页测试设备实时数据
     * 每天最后一条
     *
     * @param irrd 污水厂ID，为空时查询全部
     * @return
     */
    List<DrainRmstSzViewVo> getDrainRmstSzLastData(String irrd);


    List<Map<String, Object>> getFieldData(String field, String irrdCode, String startTime, String endTime);

    List<MonitoringVo> getTreatmentData(MonitoringVo monitoringVo);

    List<PumpDataDTO> queryPumpData(PumpDataDTO dto);

    Map<String, Object> getDeviceStatusSummary();

    void install(String msg, DrainRRmstVo drainRRmstVo);

    void saveSz(String msg, DrainRRmstVo drainRRmstVo);

    Boolean insertByBo(DrainRmstSzBo bo);

    //查询每天测站的实时数据和累计流量差值
    List<Map<String, Object>> selectByRmstSzList();

    /**
     * 管网监测分析
     * 查询水质和流量的当天的最新数据
     *
     * @param req
     * @return
     */
    List<DrainRmstSzVo> getLatestWaterQualityAndFlow(DrainRmstSzReq req);


    /**
     * 管网沿程分析
     * 取距离查询时间点最近的数据
     *
     * @param req
     * @return
     */
    List<DrainRmstSzVo> getPipeNetworkAnalysis(DrainRmstSzReq req);

    Boolean updateByBo(DrainRmstSzBo bo);

    Boolean deleteById(String id, Boolean isValid);

    /**
     * 查询污水厂当天最新的数据
     *
     * @return
     */
    List<DrainRmstSzVo> getLastMeetStatus();


    /**
     * 导出污水厂水质实时数据
     *
     * @param request
     * @return
     */
    List<DrainRmstSzVo> selectFactoryList(DrainRmstSzReq request);


    /**
     * 管网监测列表
     *
     * @param request
     * @return
     */
    PageDataInfo<DrainRmstSzVo> listPipelineDataByPage(DrainRmstSzReq request);

    /**
     * 统计污水厂当日处理量
     *
     * @return
     */
    Map<String, double[]> statisticsRmstSzFactry();

    /**
     * 根据条件查询js_lg数据
     * 支持以下查询模式：
     * 1. factId为空且时间范围为空：查询全部测站的最新一条js_lg值
     * 2. factId不为空且时间范围为空：根据factId查询测站的最新一条js_lg值
     * 3. factId和时间范围都不为空：查询指定测站在时间范围内每天最新一条数据的总和
     * 4. factId为空且时间范围不为空：查询每个测站在时间范围内每天最新一条数据的总和
     *
     * @param request 查询请求参数
     * @return 查询结果（可能是最新记录列表或统计结果列表）
     */
    Object getJsLgDataByCondition(DrainRmstSzStatisticsReq request);

    List<String> selectByRmstHour();
}
